package py.fpuna.ii.electiva2.server;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import py.fpuna.ii.electiva2.client.GWTServiceVent;
import py.fpuna.ii.electiva2.client.model.*;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import py.fpuna.ii.electiva2.dto.ClienteDTO;
import py.fpuna.ii.electiva2.dto.ProductoDTO;
import py.fpuna.ii.electiva2.dto.VentaDTO;
import py.fpuna.ii.electiva2.interfaces.VentaFacadeRemote;

/**
 *
 * @author gonzaleza
 */
public class GWTServiceVentImpl extends RemoteServiceServlet implements GWTServiceVent {
    
    public String guardarVenta(VentaModel vent, Integer IDProducto, Integer IDCliente) {
        try {

            Context ctx = new InitialContext();
            VentaFacadeRemote ventaFacadeR = (VentaFacadeRemote) ctx.lookup("java:comp/env/VentaFacadeBean");

            VentaDTO ventDto = new VentaDTO();

            ventDto.setVentCantidad(vent.getVentCantidad());
            //ventDto.setVentCliente(vent.getVentCliente());

            String mensaje = ventaFacadeR.createVenta(ventDto, IDProducto, IDCliente);
            if (mensaje.compareTo("true")== 0)
            {
                return "true";
            }else {
                return "false";

            }
            

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceVentImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "false";

        
    }

    public List<VentaModel> listarVenta() {
        List <VentaModel> responseList = new ArrayList<VentaModel>();


        try {

            Context ctx = new InitialContext();
            VentaFacadeRemote ventaFacadeR = (VentaFacadeRemote) ctx.lookup("java:comp/env/VentaFacadeBean");

            //trae la lista de productos de la BD          
            List <VentaDTO> ventaList = new ArrayList();
            try {
                ventaList = ventaFacadeR.listarVenta();
            } catch (Exception ex) {
                Logger.getLogger(GWTServiceCompImpl.class.getName()).log(Level.SEVERE, null, ex);
            }

            for (VentaDTO vent : ventaList){
                VentaModel ventpMod = new VentaModel();
                ventpMod.setVentCantidad(vent.getVentCantidad());
                
                //para cargar el producto de una venta
                ProductoModel prodModel = new ProductoModel();
                prodModel.setProdCodigo(vent.getVentProducto().getProdCodigo());
                prodModel.setProdCantidad(vent.getVentProducto().getProdCantidad());
                prodModel.setProdDescripcion(vent.getVentProducto().getProdDescripcion());
                prodModel.setProdPrecioCompra(vent.getVentProducto().getProdPrecioCompra());
                prodModel.setProdPrecioVenta(vent.getVentProducto().getProdPrecioVenta());

                //para cargar el cliente de una venta
                ClienteModel cliModel = new ClienteModel();
                cliModel.setClieCodigo(vent.getVentCliente().getClieCodigo());
                cliModel.setClieNombre(vent.getVentCliente().getClieNombre());


                ventpMod.setVentProducto(prodModel);
                ventpMod.setVentCliente(cliModel);

                responseList.add(ventpMod);
            }

            return responseList;

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceVentImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }


    public List<ClienteModel> listarClientes() {
        List <ClienteModel> responseList = new ArrayList<ClienteModel>();

        try {

            Context ctx = new InitialContext();
            VentaFacadeRemote ventaFacadeR = (VentaFacadeRemote) ctx.lookup("java:comp/env/VentaFacadeBean");

            //trae la lista de clientes de la BD
            List <ClienteDTO> clienteList = new ArrayList<ClienteDTO>();

            clienteList = ventaFacadeR.listarClientes();

            for (ClienteDTO cli : clienteList){
                ClienteModel climod = new ClienteModel();
                climod.setClieCodigo(cli.getClieCodigo());
                climod.setClieNombre(cli.getClieNombre());
                climod.setClieApellido(cli.getClieApellido());
                climod.setClieCi(cli.getClieCi());
                climod.setClieDireccion(cli.getClieDireccion());
                climod.setClieRuc(cli.getClieRuc());
                responseList.add(climod);
            }

            return responseList;

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceVentImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

    public List<ProductoModel> listarProductos() {
        List <ProductoModel> responseList = new ArrayList<ProductoModel>();

        try {

            Context ctx = new InitialContext();
            VentaFacadeRemote compraFacadeR = (VentaFacadeRemote) ctx.lookup("java:comp/env/VentaFacadeBean");

            //trae la lista de productos de la BD
            List <ProductoDTO> prodList = new ArrayList<ProductoDTO>();

            prodList = compraFacadeR.listarProductos();

            for (ProductoDTO prod : prodList){
                ProductoModel prodmod = new ProductoModel();

                prodmod.setProdDescripcion(prod.getProdDescripcion());
                prodmod.setProdCodigo(prod.getProdCodigo());

                responseList.add(prodmod);
            }

            return responseList;

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceVentImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

}
